package com.sann.msm.controller;


import com.sann.common.utils.R;
import com.sann.common.utils.RandomUtil;
import com.sann.msm.service.MsmService;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@Api(tags = "阿里云短信服务")
@RestController
@RequestMapping(path = "/edumsm/*")
@CrossOrigin
public class MsmController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Autowired
    private MsmService msmService;

    /**
     * 发送短信功能：
     * 对于发送短信功能，如果不能使用就不提示短信功能不能用，因此采用try...catch捕获处理。
     * 如果对于系统异常就进行throws 向外抛出异常
     * @return
     */
    @GetMapping("/sendMsm/{phone}")
    public R sendMsm(@PathVariable String phone){
        try {
            // 阿里云短信功能需要审核(我的一直没通过，我放弃申请了)
            //1 从redis获取验证码，如果获取到直接返回
            String code = redisTemplate.opsForValue().get(phone);
            if (!StringUtils.isBlank(code)) {
                return R.ok();
            }

            //2 如果redis获取 不到，进行阿里云发送
            //生成随机值，传递阿里云进行发送
            code = RandomUtil.getFourBitRandom();

            Map<String, String> param = new HashMap<>();
            param.put("code", code);

            //调用service发送短信的方法
            boolean bol = msmService.send(param, phone);
            if (bol) {
                //发送成功，把发送成功验证码放到redis里面,设置有效时间
                redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
                return R.ok();
            }

        } catch (Exception e) {
            e.printStackTrace();
            return R.error().msg("短信发送失败");
        }

        return R.error();
    }
}
